/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.util;

import org.apache.commons.lang.StringUtils;

/**
 *
 * @author nayra
 */
public class Campo<T> {

    private String descricao;
    private String field;
    private T vlrAtual;
    private T vlrAlteracao;
    private Boolean diferente;
    private Boolean usarAlteracao;
    private Class<T> valueType;

    public Campo() {
    }

    public Campo(String descricao, String field, T atual, T alteracao, Class<T> valueType) {
        this.descricao = descricao;
        this.field = field;
        this.valueType = valueType;
        this.vlrAtual = atual;
        this.vlrAlteracao = alteracao;
        this.diferente = !verificaIgualdade();
        this.usarAlteracao = false;
    }

    public Campo(T alteracao, Class<T> valueType, Boolean usarAlteracao) {
        this.vlrAlteracao = alteracao;
        this.valueType = valueType;
        this.diferente = true;
        this.usarAlteracao = usarAlteracao;
    }

    public T getVlrAtual() {
        return vlrAtual;
    }

    public void setVlrAtual(T vlrAtual) {
        this.vlrAtual = vlrAtual;
    }

    public T getVlrAlteracao() {
        return vlrAlteracao;
    }

    public void setVlrAlteracao(T vlrAlteracao) {
        this.vlrAlteracao = vlrAlteracao;
    }

    public Boolean getDiferente() {
        return diferente;
    }

    public void setDiferente(Boolean diferente) {
        this.diferente = diferente;
    }

    public Boolean getUsarAlteracao() {
        return usarAlteracao;
    }

    public void setUsarAlteracao(Boolean usarAlteracao) {
        this.usarAlteracao = usarAlteracao;
    }

    public Class<T> getValueType() {
        return valueType;
    }

    public void setValueType(Class<T> valueType) {
        this.valueType = valueType;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }

    private boolean verificaIgualdade() {
        if (this.valueType.equals(String.class)) {
            if (StringUtils.isEmpty((String) this.vlrAlteracao)) {
                return true;
            } else {
                return StringUtils.isEmpty((String) this.vlrAtual) ? false
                        : Caracter.removecaracter((String) this.vlrAtual).equalsIgnoreCase(Caracter.removecaracter((String) this.vlrAlteracao)) ? true
                        : false;
            }
        } else {
            if (this.vlrAlteracao == null) {
                return true;
            } else {
                return this.vlrAtual == null ? false : this.vlrAtual.equals(this.vlrAlteracao) ? true : false;
            }
        }
    }
}
